---------1,计算数的各位和-------------
function calNum(x)
  local sum=0
  while(x~=0) do
  sum=sum+math.fmod(x,10) --fmod取余数
  x=math.modf(x/10)   --x为商，更新之前的x
  end
  return sum     --返回各位之和
end
--------------------------------------
res=0;        --结果
dx={1,0,-1,0} --横向的方向
dy={0,-1,0,1} --纵向的方向
array = {}    --初始化地图
xEdge=0  --边界
yEdge=0  --边界
----------2，机器人的运动范围遍历-----
function dfs(x,y,thr)
 if(x<0 or y<0 or x>=xEdge or y>=yEdge or array[x][y]==0 or (calNum(x)+calNum(y))>thr)
  then return  --如果超出范围 或者 该点已经遍历过了 或者 数位之和不符合要求
 end            --则退出
 res=res+1      -- 否则结果+1
 for i=1,4 do   --上下左右四个方向
  array[x][y]=0   --遍历过的置零
  dfs(x+dx[i],y+dy[i],thr)  --更新坐标进入下一层遍历
 end
 return
end
---------3，入口函数-----------------
function movingCount(rows,cols,thr)
 for i=0,rows-1 do--初始化地图都为1
  array[i]={}
  for j=0,cols-1 do
   array[i][j]=1
  end--
 end--
 xEdge=rows     --更新边界值
 yEdge=cols
 dfs(0,0,thr)
 return res
end
---test----------
print(movingCount(3,2,17))



